/* stack.h          */
/* Stack operations */
 
#ifndef _STACK_H
#define _STACK_H
  
/* the inner structure is opaque */
typedef struct s_stack *stack;
   
/* Basic ops are macro */
#define empty_stack() (NULL)
#define stack_is_empty(s) (!(s))

/* Standard stack ops */
/* push an element on the stack and return the new stack */
stack push(void *x, stack s);
     
/* pop the first element of a non-empty stack and return it. */
/* stack is modified */
void *pop(stack *s);
      
#endif
/* END: stack.h */

